/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/8/27 11:23
 * 线程中断方法二：调用interrupt（）方案来通知
 *      使用标准库内置的标记
 *      获取线程内置的标志：线程的isInterrupted()判定当前线程是不是应该要结束循环
 *      修改线程内置标记位：Thread.interrupt（）来修改标记位
 *          这里的interrupt方法可能有两种行为：
 *              1.如果当前线程正在运行中，此时就会修改Thread.currentThread().isInterrupted()标记位为true
 *              2.如果当前线程正在sleep/wait/等待锁,,,此时会出发 InterruptedException
 *
 */
public class ThreadDemo11 {
    public static void main(String[] args) {
        Thread t =new Thread(){
            @Override
            public void run() {

                //isInterrupted()是Thread的实例方法，和这个方法类似的还有一个Thread的类方法
                //interrupted()
                //区别：使用这个静态方法，会自动清楚标志位。
                //调用interrupt()方法，把标志位设为true，就应该结束循环
                //当调用静态的interrupted()方法来判定标志位的时候，就会返回true，同时就会把标志位再改回false.下次在调用interrupted()就返回false
                //当调用非静态的isInterrupted()方法来判定标志位的时候，也会返回true，同时 不 会对标志位进行修改.下次在调用interrupted()仍然返回true
                while(!Thread.currentThread().isInterrupted()){
                    System.out.println("线程执行中...");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        break;
                    }
                }
            }
        };
        t.start();
        //
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t.interrupt();

    }
}
